package service

import (
	"context"
	"monitoring-api/cache"
	"monitoring-api/models"
	"monitoring-api/serializer"
	"monitoring-api/util"
)

// UploadActionService 管理上传错误信息服务
type UploadActionService struct {
	Area     int64  `json:"area" form:"area"`         // 地区，34个地区转换成数字存储，无法获取则传递0
	Browser  int64  `json:"browser" form:"browser"`   // 浏览器类型，只匹配主流浏览器类型，剩下的归为其他(0)
	Duration int64  `json:"duration" form:"duration"` // 在页面的停留时间，毫秒数
	IP       string `json:"ip" form:"ip"`             // ip，无法获取则传递 0.0.0.0
	Kind     int64  `json:"kind" form:"kind"`         // 报告分类，2表示行为报告
	Time     int64  `json:"time" form:"time"`         // 访问页面的时间，时间戳
	URL      string `json:"url" form:"url"`           // 页面地址，不带?后面的get参数
	User     int64  `json:"user" form:"user"`         // 用户id，通过设置token区分每个用户
	WebID    int64  `json:"web_id" form:"web_id"`     // 网站id，由使用者调用脚本函数传递
}

// Upload 上传错误信息服务
func (service *UploadActionService) Upload() serializer.Response {
	//初始化一个完整结构体
	Err := models.UserAction{
		WebID:    service.WebID,
		Kind:     service.Kind,
		Time:     service.Time,
		URL:      service.URL,
		Area:     service.Area,
		Browser:  service.Browser,
		Duration: service.Duration,
		IP:       service.IP,
		User:     service.User,
	}
	//redis记录用户访问量和浏览量
	err := cache.AddUserCount(service.IP, util.GetTimeStr(service.Time), util.GetTimeStr(service.WebID))
	if err != nil {
		return serializer.Response{
			Code:    500,
			Message: "上报用户行为信息失败!",
			Error:   err.Error(),
		}
	}
	err = cache.AddWebView(util.GetTimeStr(service.Time), util.GetTimeStr(service.WebID))
	if err != nil {
		return serializer.Response{
			Code:    500,
			Message: "上报用户行为信息失败!",
			Error:   err.Error(),
		}
	}
	// 添加进MongoDB
	collection := models.Mongo.Collection("actions")
	_, err = collection.InsertOne(context.TODO(), Err)
	if err != nil {
		return serializer.Response{
			Code:    500,
			Message: "上报用户行为信息失败!",
			Error:   err.Error(),
		}
	}
	return serializer.Response{
		Code:    0,
		Message: "上报用户行为信息成功!",
	}
}
